package com.amber.proyecto.envia.imagenes.sw;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.amber.proyecto.envia.imagenes.sw.mibd.BD;
import com.amber.proyecto.envia.imagenes.sw.utils.Estado;
import com.amber.proyecto.envia.imagenes.sw.utils.Variables;

public class Configuracion extends ListActivity{
	private AlertDialog levelDialog;
	private Camera mCamera;
	private String[] listaOpciones = {"Correo sin Internet","Resolución cámara", "Estado de la república"};
	
	

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setListAdapter(new ArrayAdapter<String>(this, R.layout.listaopciones, listaOpciones));
		
		ListView listaOpciones = getListView();
        listaOpciones.setTextFilterEnabled(true);
        listaOpciones.setOnItemClickListener(listaPres);

        
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent intent = new Intent();
    		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.setClass(Configuracion.this, Principal.class);
            startActivity(intent);
            finish();
        }
        return super.onKeyDown(keyCode, event);
    }
	
	private OnItemClickListener listaPres = new OnItemClickListener() {

		public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
			switch (pos){
			case 0: dialogoCorreo(Configuracion.this);
					break;
			case 1: seleccionaResolucion();
					break;
			case 2: estadoRep();
			
				    //Log.i("Estado seleccionado",estado.getNombreEstado()+ " Lat "+estado.getLatitud()+" Long "+estado.getLongitud() );
				
					break;

			}
		}
	};
	
	private void estadoRep(){
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Selecciona el estado de la república");
		final BD bd = new BD(this);
		final ArrayList<String> alEstado =  bd.obtieneEstados();
		
		String [] estados = alEstado.toArray(new String[alEstado.size()]);
		builder.setSingleChoiceItems(estados, 0, new DialogInterface.OnClickListener() {
	        public void onClick(DialogInterface dialog, int item) {
	        	Toast.makeText(Configuracion.this, "Estado seleccionado "+alEstado.get(item), Toast.LENGTH_LONG).show();
	        	//Log.i("Estado seleccionado ", ""+alEstado.get(item)+"pos "+(item+1)); 
	        	Variables.estado = item ;
	        	Variables.estadoSeleccionado = bd.obtieneEstado(item+1);
	        	bd.actualizaIdEstado(item+1);
	        	//Log.i("Estado seleccionado ", ""+alEstado.get(item)+" pos "+item);
	        	//Log.i("Estado seleccionado ", ""+estado.getNombreEstado()+" Lat:"+estado.getLatitud());
	          levelDialog.dismiss();    
	            }
	        });
		    bd.close();
		    levelDialog = builder.create();
	        levelDialog.show();
	        
	        
	}
	
	private void seleccionaResolucion(){		
		mCamera = Camera.open();
		Camera.Parameters params = mCamera.getParameters();	 
		// Check what resolutions are supported by your camera
		final List<Size> sizes = params.getSupportedPictureSizes();	 
		// Iterate through all available resolutions and choose one.
		// The chosen resolution will be stored in mSize.
		ArrayList<String> listaResoluciones = new ArrayList<String>();
		for (Size size : sizes) {
			listaResoluciones.add(size.width+"x"+size.height+" "+(((size.width*size.height)/1024000)+1)+" M");
		   // Log.i("Resolución", "Available resolution: "+size.width+" "+size.height+" MP "+(size.width*size.height)/1024000);
		}
		mCamera.stopPreview();
		mCamera.release();
		mCamera=null;
		
		String [] resoluciones = listaResoluciones.toArray(new String[listaResoluciones.size()]);
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setIcon(android.R.drawable.ic_dialog_info);
        builder.setTitle("Selecciona la resolución");
        builder.setSingleChoiceItems(resoluciones, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
        	Variables.tamResolucion = sizes.get(item);
        	BD bd = new BD(Configuracion.this);
        	bd.actualizaResolucion(sizes.get(item).width, sizes.get(item).height);
        	bd.close();
        	//Log.i("Resolución ",Variables.tamResolucion.width+"x"+Variables.tamResolucion.height);    	
            levelDialog.dismiss();    
            }
        });
        levelDialog = builder.create();
        levelDialog.show();		
	}
	
	
	//TODO Falta ver el correo fuera de línea y recuperarlo en toda la aplicación
	public void dialogoCorreo(Context context){
		LayoutInflater li = LayoutInflater.from(context);
		View promptsView = li.inflate(R.layout.dialogousuario, null);

		final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
				context);

		// set prompts.xml to alertdialog builder
		alertDialogBuilder.setView(promptsView);

		final EditText etCorreo = (EditText) promptsView.findViewById(R.id.etCorreoUsuarioDialog);
		final TextView tvMensaje = (TextView)promptsView.findViewById(R.id.tvTextoDialogoUsu);
		tvMensaje.setText("Captura tu correo");

		// set dialog message
		alertDialogBuilder
			.setCancelable(false)
			.setTitle("Correo")
			.setIcon(android.R.drawable.ic_dialog_alert)
			.setPositiveButton("Aceptar",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface d, int which) {
                    //Do nothing here. We override the onclick
                }
			}

			  )
			.setNegativeButton("Invitado",
			  new DialogInterface.OnClickListener() {
			    public void onClick(DialogInterface dialog,int id) {
			    	Variables.correoSinInternet = "sisfotosturisticas@gmail.com";
			    	setResult(RESULT_OK);
			    	
			    }
			  });

		// create alert dialog
		final AlertDialog alertDialog = alertDialogBuilder.create();
		alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {

			public void onShow(DialogInterface dialog) {
				Button btn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
				btn.setOnClickListener(new View.OnClickListener() {
					public void onClick(View v) {
						if (etCorreo.length() != 0 && validarCorreo(etCorreo.getText().toString()) == true){
							Variables.correoSinInternet = etCorreo.getText().toString();
							Toast.makeText(Configuracion.this, "Correo capturado "+etCorreo.getText().toString(), Toast.LENGTH_LONG).show();
							alertDialog.dismiss();
							
						}
						else{
							Toast.makeText(Configuracion.this, "Captura una dirección de correo válida", Toast.LENGTH_LONG).show();
						}

					}
				});
			}
		});
		// show it
		alertDialog.show();
		


		
	}
	
	private boolean validarCorreo(String correo){
	    String  expression="^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";  
	       CharSequence inputStr = correo;  
	       Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);  
	       Matcher matcher = pattern.matcher(inputStr);  
	       return matcher.matches();
	}
	

}
